#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define TRUE  1
#define FALSE 0
#define OK    1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW   -2
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef int SElemType;
typedef int Status;
typedef struct{
    SElemType *base;
    SElemType *top;
    int StackSize;
}SqStack;
Status StackInit(SqStack &S){
    S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
    if(!S.base)   return ERROR;
    S.top=S.base;
    S.StackSize=STACK_INIT_SIZE;
    return OK;
}
Status GetTop(SqStack S,SElemType &e){
    if(S.top==S.base)  return ERROR;
    e=*(S.top-1);
    return OK;
}
Status Push(SqStack &S,SElemType e){
    if (S.top-S.base>=S.StackSize) {
        S.base=(SElemType *)realloc(S.base,(S.StackSize+STACKINCREMENT)*sizeof(SElemType));
        if(!S.base)  return ERROR;
        S.top=S.base+S.StackSize;
        S.StackSize+=STACKINCREMENT;
    }
    *S.top++=e;
    //*S.top=e;
    //*S.top++;
    return OK;
}
Status Pop(SqStack &S,SElemType &e){
    if (S.top==S.base) {
        return ERROR;
    }
    e=*--S.top;
    return OK;
}
int main(int argc, char const *argv[]) {
    int N;
    SqStack S;
    SElemType e;
    StackInit(S);
    scanf("%d\n",&N);
    while (N) {
        Push(S,N%8);
        printf("%d\n",e);
    }
    return 0;
}
